﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;

namespace GenerateDiagram
{
    /// <summary>
    /// Một class abstract của đối tượng database
    /// </summary>
    public abstract class AbstractDatabase : AbstractBase
    {
        /// <summary>
        /// Danh sách các bảng của một Database
        /// </summary>
        
        [BrowsableAttribute(false)]
        public List<AbstractTable> Tables { get; set; }
        /// <summary>
        /// Tùy chọn namespace khi render ra class diagram
        /// </summary>
        [DescriptionAttribute("Namespace to render class diagram")]
        public string NamaspaceRender { get; set; }
        /// <summary>
        /// .Net version sẽ render class diagram
        /// </summary>

        [DescriptionAttribute(".Net framework version to render")]
        public Common.Version VersionRender { get; set; }
        /// <summary>
        /// Get or set thuộc tính có render các khóa ngoại hay không
        /// </summary>
        /// 
        [DescriptionAttribute("Set yes or no render foreign key")]
        public bool CanRenderForeignKey { get; set; }


        /// <summary>
        /// Hàm sinh ra các class file
        /// </summary>
        /// <param name="folderPath">Đường dẫn folder chưa các file khi render</param>
        /// <returns>True: Nếu thao thác thành công; ngược lại không thành công</returns>
        public abstract bool GenerateCode(string folderPath);

        /// <summary>
        /// Lấy tất cả database của cơ sở dữ liệu cần thao tác
        /// </summary>
        /// <param name="databaseName"></param>
        /// <returns>Danh sách các database</returns>
        public abstract List<AbstractDatabase> GetAllDatabases(string databaseName);
        public abstract bool SetTables(string databaseName);
    }
}
